/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package projetoestrutura;

import edu.uci.ics.jung.graph.DirectedGraph;
import edu.uci.ics.jung.graph.DirectedSparseMultigraph;
import java.io.*;
import java.util.ArrayList;
import javax.swing.JFileChooser;

/**
 *
 * @author Renan
 */
public class Grafo {
    
    static ArrayList<MyNode> lista = new ArrayList<>();
    static int edgeCount = 0;  
    static DirectedGraph<MyNode, MyLink> g;
    
    public DirectedGraph<MyNode, MyLink> leitura() throws FileNotFoundException, IOException
    {
        g = new DirectedSparseMultigraph<>();
        File arquivos[];  
        //File diretorio = new File("F:/Projeto de Estrutura/sir_dados");
        File diretorio = null;
        JFileChooser c = new JFileChooser();
        c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int retorno = c.showOpenDialog(null);
        
        if(retorno== JFileChooser.APPROVE_OPTION)
        {
            diretorio = new File(c.getSelectedFile().getAbsolutePath());
            arquivos = diretorio.listFiles();  
            lista = adicionarNodes();
        
           for(int i = 0; i < arquivos.length; i++)
            {
                int rm = Integer.valueOf(arquivos[i].getName().substring(0, 5));

                FileReader f = new FileReader(arquivos[i]);
                BufferedReader b = new BufferedReader(f);
                String linha = b.readLine();

                while(linha != null)
                {
                    String a[] = linha.split(",");

                    for(int j = 0; j < a.length; j++)
                    {
                        int rm2 = Integer.valueOf(a[j].trim());
                        g.addEdge(new MyLink(), buscarRM(rm), buscarRM(rm2) );
                    }
                    linha = b.readLine();
                }
            
            
            }
            
            }
        return g;
    }
    
    class MyNode 
    {
        int rm; 
    
        public MyNode(int rm) 
        {
            this.rm = rm;
        }

        @Override
        public String toString() 
        { 
            return ""+rm; 
        }
    }
    
    class MyLink 
    {
        int id;
        public MyLink() 
        {
            this.id = edgeCount++; 
        }
    
        @Override
        public String toString()
        { 
            return "E"+id;
        }
    }
    
    public MyNode buscarRM(int rm)     
    {
        int flag=-1;
        for(int k =0; k < lista.size(); k++)
        {
            if(lista.get(k).rm == rm)
                flag = k;
        }
        if(flag==-1)
        {
            MyNode n = new MyNode(rm);
            lista.add(n);
            return n;
        }
        return lista.get(flag);
    }
    
    public ArrayList<MyNode> adicionarNodes()
    {
        File arquivos[];  
        File diretorio = new File("F:/Projeto de Estrutura/sir_dados");  
        arquivos = diretorio.listFiles();  
        
        for(int i = 0; i < arquivos.length; i++)
        {
            int rm = Integer.valueOf(arquivos[i].getName().substring(0, 5));
            lista.add(new MyNode(rm));
        }
        return lista;
    }
}
